//
//  HomeuserModel.swift
//  weibo1
//
//  Created by 代亚洲 on 16/4/21.
//  Copyright © 2016年 itcast. All rights reserved.
//

//  当前viewModel对应的View是 HomeTableViewController

//  专门用于负责加载 首页控制器的数据，进行字典转模型

import UIKit
import SDWebImage

class HomeuserModel: NSObject {

//    var starusermodel : StarUserModel?
    
    var statusArray: [Homecellviewmdoel]?
    
    
    
    //    请求数据
    func loaddata(isPullup: Bool,finshed : (isSucces : Bool)->()){
        //        1地址     https://api.weibo.com/2/statuses/friends_timeline.json
        //        https://api.weibo.com/2/statuses/home_timeline.json
        let urstrong = "https://api.weibo.com/2/statuses/home_timeline.json"
//        设定id类型是int64 因为新浪微博的微博总数超过int32
        var max_id : Int64 = 0
        var since_id: Int64 = 0
        if isPullup {
            
//            是上拉加载
//            取得数组中最后一个微博的id
            max_id = statusArray?.last?.status?.id ?? 0
            // 去除重复：若指定此参数，则返回ID小于或 “等于” max_id的微博，默认为0
//            当id相同时减减
            if max_id != 0 {
                max_id--
            }
        }else {
            
            since_id = statusArray?.first?.status?.id ?? 0

            
        }
        
        
        //        2定义请求 没有请求令牌请求不到数据 请求的数据名称
        let parms = [
            "access_token" : AuthViewModel.sharedViewModel.accessToken ?? "",
            "max_id": "\(max_id)"
            ,"since_id": "\(since_id)"
        ]
        //        3发送请求
        NetWorkToolsAFN.sharedTolls.request(RequestMethod.Get, url: urstrong, parameters: parms) { (responseObject, error) -> () in
            //        如果有错误就直接结束
            if  error != nil
            {
            print(error)
                return
            }
            //            print(responseObject)
            //            判断返回的数据是不是字典
            guard let responseObject  = responseObject as? [String : AnyObject] else
            {
                print("返回的数据不是字典")
                return
            }
            //            取出对应节点的数据  statuses 用户的具体数据 （这个数据是字典数组要用
            //            [[String : AnyObject]]）
            guard let dic = responseObject["statuses"] as? [[String : AnyObject]] else
            {
                finshed(isSucces: false)

                return
            }
            
            //           取到数据 遍历
            //            初始化空数组
            var temarray = [Homecellviewmdoel]()
            //            遍历
            for value in dic
            {
                // 转成模型
                let model = StarUserModel(dict: value)
             // 初始化一个ViewModel
                let viewmodel = Homecellviewmdoel()
                // 设置模型到ViewModel里面去
                viewmodel.status = model
                temarray.append(viewmodel)
                // 测试
                if model.retweeted_status != nil {
//                    print(model)
                }
                
//                print(temarray)
            }
            //            赋值给self.statusArray
//            self.statusArray = temarray
            
            if self.statusArray == nil {
                self.statusArray = [Homecellviewmdoel]()
            }
            
            // 判断是否是上拉加载
            if isPullup {
//                在现有数据下面显示新请求回来的数据
                self.statusArray = self.statusArray! + temarray
            }else{
                self.statusArray = temarray + self.statusArray!
            }
            
            print("心情求回\(temarray.count)条数据")
//            finshed(isSucces:true)
            
            //            刷新tableView
            //            self.tableView.reloadData()
            //　缓存单张图片
            self.cachSingleImage(temarray, finished: finshed)
        }
        
    }
    
    /// 缓存单张图片
    ///
    /// - parameter array: 本次加载回来的数据

    private func cachSingleImage(array: [Homecellviewmdoel], finished: (isSuccess: Bool)->()){
//        创建调度组
        let group = dispatch_group_create()
        
        // 1. 遍历判断图片数组是否是单张

        for value in array {
            
            // 是取原创微博的图片还是转发微博的图片
            let originalPicUrls = value.status?.pic_urls
            let retweetPicurls = value.status?.retweeted_status?.pic_urls
            
            // 取到图片数组 如果originalPicUrls为空或者为零 就是retweetPicurls 否则就是originalPicUrls
            let picUrls = (originalPicUrls == nil || originalPicUrls!.count == 0) ? retweetPicurls : originalPicUrls
//            如果数组中只有一个地址
            if picUrls?.count == 1 {
                // 取到下载地址
                let urlString = picUrls?.first?.thumbnail_pic
//                print(urlString)
                // 放一个鸡蛋
                dispatch_group_enter(group)
                // 2. 去下载
                // 缓存图片的时候是以图片的地址进行md5加密之后的字符串作为图片的文件名
                SDWebImageManager.sharedManager().downloadImageWithURL(NSURL(string: urlString ?? ""), options: [], progress: nil, completed: { (image, error, _, _, _) -> Void in
                    // 3. 监听下载完成
                    // - 更新单张图片的配图视图的大小
                    value.updateSingleImagePictureViewSize()
                    // 拿出来一个鸡蛋
                    dispatch_group_leave(group)
                })
            }
        }
        
        // 4. 所有单张图片的下载完成通知
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            // - 回调界面刷新
            finished(isSuccess: true)
        }
    }

}
